Linux(操作系统)

Linux

Linux介绍

  Linux:在1991年10月被Linus Torvalds(林纳斯·托瓦兹)创建,并于1994年发布了Linux-v1.0。是一套免费使用自由传播类Unix操作系统,是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。

1

Linux特点

  Linux是一款完全免费的操作系统,用户可以通过各种渠道下载使用。
  Linux是一款完全开源的操作系统,用户可以任意修改其源代码。
  Linux支持多用户,多任务的使用方式,对不同的用户有着不同的权利。
  Linux具有良好的界面,同时具有字符界面和图形界面。
  Linux支持多平台,可以运行在多种硬件平台上。
  Linux内核高效稳定,可使用户方便地建立防火墙,服务器。

Linux注意事项

  Linux严格区分大小写,大小写不同,命令不同。
  Linux中所有内容以文件形式保存,包括硬件。
  Linux和Windows不同,不靠扩展名来区分文件类型。
  Linux所有的设备都需要先挂载之后才能使用。
  Windows下的程序不能直接在Linux中安装运行。

Linux常用命令

  此命令都是运行在Ubuntu系统中,不同的Linux系列,如Debian系列和Redhat命令大同小异。

显示目录文件

命令 说明
ls -a 显示所有的文件,包括隐含文件(以.开头)
ls -l 显示文件的详细信息,不包括隐含文件
ls -h 以人性化形式显示文件,不包括隐含文件
ls -i 查看文件的i结点,不包括隐含文件

1

  文件信息字段
  第一项第一个字母:文件的类型,-代表二进制文件,d代表目录,l代表软连接文件
  第一项第二个字母到第四个字母:文件所有者可对文件的操作
  第一项第五个字母到第七个字母:组内成员可对文件的操作
  第一项第八个字母到第十个字母:其他用户可对文件的操作
  三个字母为一组,从左到右分别是读(r),写(w),执行(x)
  第二项:文件硬链接数
  第三项:文件的所有者
  第四项:文件的所属组
  第五项:文件所占用的字节空间
  第六项:文件最近的访问时间
  第七项:文件名

目录处理命令

命令 说明
mkdir -p dicname 递归创建名为dicname的文件夹
mkdir dicname 创建名为dicname的文件夹
cd dicname 切换目录
cd .. 返回上一级目录
pwd 显示当前目录
rmdir dicname 删除空目录
cp old new 复制文件
cp -r old new 复制目录
cp -p old new 保留属性复制
mv old new 剪切文件
rm filename 删除文件
rm -r dicname 删除目录
rm -f 强制执行

2

文件处理命令

命令 说明
touch filename 创建名为filename的空文件
cat filename 显示filename文件内容
cat -n filename 显示filename文件内容,并显示行号
tac 反向显示文件内容
less 分页显示文件内容(pageup和pagedown)
head -n m 显示文件前m行
tail -n m 显示文件后m行

4

链接命令

命令 说明
ln filename hardlink 生成链接到filename的硬链接
ln -s filename softlink 生成链接到filename的软链接

  硬链接
  硬链接除了文件名所在地,其余信息都相同。
  硬链接后,文件信息中的链接数会加1。
  硬链接文件的i节点和源文件相同。
  硬链接不能跨分区。
  硬链接不能针对目录。
  源文件丢失,仍然可以访问硬链接。

  软链接
  软链接类似于Windows中的快捷方式,有箭头指向。
  软链接后,文件信息中的链接数不变。
  软链接文件的i节点和源文件不同。
  软链接可以跨分区。
  软链接可以针对目录。
  源文件丢失,不能访问软链接。

3

权限管理命令

命令 说明
chmod op filename 修改filename文件的权限
chmod -R op dicname 修改dicname目录下所有文件的权限
chown own filename_or_dicname 修改文件或目录的所有者
chgrp grp filename_or_dicname 修改文件或目录的所属组
umask 查看当前用户新建文件的缺省权限

  文件权限
  r:读权限,可以查看文件内容,如cat, tac, less, head, tail等
  w:写权限,可以修改文件内容,如vi, vim等
  x:执行权限,可以执行文件,如script, command等

  目录权限
  r:读权限,可以列出目录内容,如ls等
  w:写权限,可以在目录中创建删除文件,如touch, mkdir, rmdir, rm等
  x:执行权限,可以进入目录,如cd等

  修改权限两种操作
  u/g/o/a +/-/= r/w/x对所有者/所属组/其他用户/所有人 加/减/赋值 读/写/执行权限
  如 chmod g+w, o-r filename 对filename的所属组添加写权限,对其他用户删除读权限

  直接利用数字进行赋值权限
  如 chmod 644 filename 对filename的所有者添加读写权限,对所属组和其他用户添加读权限
6

文件搜索命令

命令 说明
find range condition 查找range范围内符合条件的文件或目录
locate filename 从文件资料库中查找文件
which command 搜索命令所在目录及别名信息
whereis command 搜索命令所在目录及帮助文档路径
grep string file 在文件中搜索字符串匹配的行并输出
grep -i string file 不区分字符串大小写搜索匹配的行并输出
grep -v string file 在文件中排除与字符串匹配的行并输出
grep -n string file 在文件中搜索字符串匹配的行并输出,并显示行数

  find搜索匹配条件
  *:匹配字符多个
  如*init指以init结尾的文件名,*init*指包含init的文件名
  ?:匹配单个字符
  如???init指以init结尾长度为7的文件名
5

帮助命令

命令 说明
man command 获得命令的帮助信息
whatis command 查看命令的功能
apropos filename 查看配置文件的简要信息
command –help 查看命令的常见选项
help command 查看shell内置命令的帮助信息
7

网络命令

命令 说明
write username 给用户发信息
wall 发广播信息
ping ip 对ip地址发数据包检测网络连通性,一直在发送
ping -c n ip 对ip地址发数据包检测网络连通性,发送n次
ifconfig net_card ip 配置网卡的ip地址
mail username 查看发送的电子邮件
last 列出登录系统的用户信息
lastlog 查看所有用户最后一次登录的时间
lastlog -u userid 查看用户id为userid(不是用户名)的用户最后一次登录时间
traceroute url 查看数据包到主机间的路径
netstat -t 显示网络中的TCP协议
netstat -u 显示网络中的UDP协议
netstat -l 监听网络服务
netstat -r 查看路由表
netstat -n 显示ip地址和端口号
8

关机重启命令

命令 说明
shutdown -c 取消上一个关机命令
shutdown -h +n n分钟后关机
shutdown -h time 到达时间time关机
shutdown -h now 现在关机
shutdown -r +n n分钟后重启
shutdown -r time 到达时间time重启
shutdown -r now 现在重启

修改系统默认运行级别

命令 说明
vim /etc/inittab 修改系统默认运行级别
runlevel 查看系统运行级别

  系统运行级别
  0:关机
  1:单用户模式
  2:不完全多用户模式,不含 NFS服务
  3:完全多用户模式务
  4:未分配
  5:图形界面
  6:重启

用户配置文件

命令 说明
less /etc/passwd 查看用户信息文件
less /etc/shadow 查看用户影子文件
less /etc/group 查看组信息文件
less /etc/gshadow 查看组影子文件

  用户信息文件字段
  第一个字段:用户名称
  第二个字段:密码标志
  第三个字段:用户ID(UID)
  第四个字段:用户初始组ID(GID)
  第五个字段:用户说明
  第六个字段:家用户
  第七个字段:登录后的shell

  用户影子文件字段
  第一个字段:用户名称
  第二个字段:加密密码
  第三个字段:密码最后一次修改时间
  第四个字段:两次密码修改间隔
  第五个字段:密码有效期
  第六个字段:密码到期前的警告天数
  第七个字段:密码过期后的宽限天数
  第八个字段:账号失效时间
  第九个字段:保留字段

  组信息文件字段
  第一个字段:组名称
  第二个字段:组密码标志
  第三个字段:组ID(GID)
  第四个字段:组中附加用户

  组影子文件字段
  第一个字段:组名称
  第二个字段:组密码
  第三个字段:组管理员用户名
  第四个字段:组中附加用户

用户管理命令

命令 说明
useradd username 添加新用户
useradd -u username 添加新用户,手动指定用户id
useradd -d username 添加新用户,手动指定家目录
useradd -c username 添加新用户,手动指定用户说明
useradd -G username 添加新用户,手动指定附加组
useradd -g username 添加新用户,手动指定初始组
useradd -s username 添加新用户,手动指定登录shell
passwd username 设置用户密码
passwd -s username 查询用户密码状态
passwd -l username 暂时锁定用户
passwd -u username 解锁用户
userdel username 删除用户
change -l username 列出用户的详细密码状态
change -d username 修改密码最后一次更改日期
change -m username 修改两次密码修改间隔
change -M username 修改密码有效期
change -W username 修改密码过期前警告天数
change -I username 修改密码过期后宽限天数
change -E username 修改账号失效时间

用户组管理命令

命令 说明
groupadd groupname 添加新用户组
groupadd -g groupname 添加新用户,手动指定组id
groupmod -g groupname 修改组id
groupmod -n groupname 修改组名
groupdel groupname 删除用户组
gpasswd -a groupname 将用户加入用户组
gpasswd -a groupname 将用户从用户组删除

文件系统管理命令

命令 说明
df -a dirname 显示文件的系统信息
df -h dirname 以人性化方式显示文件的系统信息
df -a dirname 显示文件的系统类型
du -a dicname 显示每个子文件的磁盘占用量
du -h dicname 以人性化方式显示每个子文件的磁盘占用量
du -s dicname 统计总占用量
fdisk -l 查看u盘的设备文件名
mount -t vfat device dicname 将u盘文件名device挂载到dicname文件名中
umount device 卸载挂载device

终端常用命令

命令 说明
Ctrl + Alt +t 打开终端
Ctrl + d 退出终端
Ctrl + c 终止正在运行的程序
Ctrl + l 清屏
Ctrl + s 锁住终端
Ctrl + q 解锁终端
Ctrl + r 查找历史命令
^up 查看上一个历史记录
^down 查看下一个历史记录
su 切换到root用户
su username 切换到username用户
sudo command 以root权限执行命令
TAB 命令与文件补全
alias 查看命令的别名
alias newname command 给原命令起一个别名

重定向命令

命令 说明
command > filename 将正确命令的结果覆盖到filename文件中
command >> filename 将正确命令的结果追加到filename文件中
command 2> filename 将错误命令的结果覆盖到filename文件中
command 2>> filename 将错误命令的结果追加到filename文件中
command &> filename 将命令的结果覆盖到filename文件中(无论正确与否)
command &>> filename 将命令的结果追加到filename文件中(无论正确与否)
command >> filename1 &>> filename2 将正确的命令结果追加到filename1,错误命令的结果追加到到filename2

多命令

命令 说明
command1 ; command2 ; … 多个命令顺序执行,命令1出错命令2也会执行
command1 && command2 && … 逻辑与,命令1正确执行,命令2才会执行
command1 ll command2 ll … 逻辑或,命令1不正确执行,命令2才会执行
command 2>> filename 将错误命令的结果追加到filename文件中
command &> filename 将命令的结果覆盖到filename文件中(无论正确与否)
command &>> filename 将命令的结果追加到filename文件中(无论正确与否)
command >> filename1 &>> filename2 将正确的命令结果追加到filename1,错误命令的结果追加到到filename2
command1 l command2 管道符,命令1的正确输出作为命令2的操作对象
9

特殊符号

符号 说明
? 匹配一个任意字符
* 匹配任意多个字符
[] 匹配[]中任意一个字符
[-] 匹配[]中任意一个字符,-代表范围,如0-9
[^] 匹配不在[]中的任意一个字符
‘’ 单引号将其作为一个整体,其中的所有特殊符号都是普通符号
“” 双引号中$调用变量的值,`引用命令,\转义字符
`` 反引号中的内容为系统命令
$ 美元符号调用变量的值
\ 反斜杠指转义符
# 注释符

正则表达式

  在Linux中,正则表达式是用来在文件中匹配符合条件的字符串,正则是包含匹配,grep,awk,sed等命令支持正则表达式。
  在Linux中,通配符是用来匹配符合条件的文件名,通配符是完全匹配,ls,find,cp等命令不支持正则表达式,只能使用通配符进行匹配。

符号 说明
* 前一个字符匹配0次或任意多次
. 匹配除换行符外任意一个字符
^ 匹配行首
$ 匹配行尾
[] 匹配括号中指定的任意一个字符
[^] 匹配除了括号中指定的任意一个字符
\ 转义字符
{n} 表示前面的字符出现n次
{n,} 表示前面的字符出现不小于n次
{n,m} 表示前面的字符至少出现n次,至多m次

字符处理命令

| 符号 | 说明 |
| cut -f n filename | 提取文件第n列 |
| cut -d interval -f n filename | 设定分隔符提取文件第n列 |
| printf “type_and_format” content | 格式化输出 |
| awk “condition1 {action1} condition2 {action2} …” filename | 对filename中符合condition的进行action操作 |
| awk “BEGIN{action} condition1 {action1} condition2 {action2} …” filename | 在对filename操作之前进行action操作 |
| awk “BEGIN{FS=’c’} condition1 {action1} condition2 {action2} …” filename | 以c为分隔符进行操作,默认分隔符为制表符 |
| awk “END{action} condition1 {action1} condition2 {action2} …” filename | 在对filename操作之后进行action操作 |
| sed -n | 把只经过sed处理的输出,原文件不变化 |
| sed -e | 允许对输入数据应用多条sed命令 |
| sed -i | 直接对文件进行修改,不显示输出 |
| sed a | 在当前行后添加一行或多行 |
| sed c | 对当前行替换 |
| sed i | 对当前行插入 |
| sed d | 删除指定的行 |
| sed p | 打印指定的行 |
| sed s | 字符替换,格式为”行范围/s/old_str/new_str/g” |
| sort | 以数值型排序 |
| sort -f | 忽略大小写排序 |
| sort -n | 以数值型排序 |
| sort -r | 反向排序 |
| sort -t | 指定分隔符,默认为制表符 |
| sort -k n[,m] | 按照指定的字段,从n开始到m结束 |
| wc | 输入字符串,Ctrl+d结束,统计行数,单词数和字符数 |
| wc filename | 统计filename文件中的行数,单词数和字符数 |
| wc -c | 输入字符串,Ctrl+d结束,统计字符数 |
| wc -w | 输入字符串,Ctrl+d结束,统计单词数 |
| wc -l | 输入字符串,Ctrl+d结束,统计行数 |
11

系统管理

命令 说明
ps aux 查看系统中的所有进程
top 查看系统的健康状态,默认每3秒更新一次
top -d 设置更新的秒数
top P 以CPU使用率排序
top M 以内存使用率排序
top N 以进程号(PID)排序
q 退出top
pstree 查看进程树
pstree -p 查看进程树,并显示进程号
pstree -u 查看进程树,并显示所属用户
kill -l 查看可用的进程信号
kill PID 正常关闭进程号为PID的进程
kill -n PID 对进程号为PID的进程进行n操作,n可以通过kill -l查询
killall p_name 杀死进程名为p_name的进程
killall p_name 杀死进程名为p_name的进程
killall p_name 杀死进程名为p_name的进程
command & 将命令放在后台执行
command + Ctrl + z 将命令放在后台,且不执行
jobs 显示后台的进程
jobs -l 显示后台的进程,并显示PID
fg 恢复第一个后台暂停的进程到前台执行
fg %work_id 恢复工作号为work_id后台暂停的进程到前台执行,注意工作号和PID不同
bg 恢复第一个后台暂停的进程到后台执行
bg %work_id 恢复工作号为work_id后台暂停的进程到后台执行,注意工作号和PID不同
vmstat flu_time flu_num 查看系统资源,间隔为flu_time,次数为flu_num
free -b 以字节为单位查看内存使用状态
free -k 以KB为单位查看内存使用状态,默认以KB为单位
free -m 以MB为单位查看内存使用状态
free -g 以GB为单位查看内存使用状态
free -b 以字节为单位查看内存使用状态
cat /proc/cpuinfo 查看CPU的详细信息
uptime 显示系统的启动时间和平均负载
uptime -a 查看系统所有相关信息
uptime -r 查看内核版本
uptime -s 查看内核名称
file /bin/ls 查看操作系统的位数
lsb_release -a 查询Linux的发行版本
lsof -c string 列出以字符串开头的进程打开的文件
lsof -u username 列出某个用户的进程打开的文件
lsof -p pid 列出某个PID进程打开的文件
18

定时任务

命令 说明
crontab -e 编辑定时任务
crontab -l 查询定时任务
crontab -r 删除所有定时任务

  编辑定时任务格式
  * * * * * 执行的任务
  第一个*:一小时当中的第几分钟(0-59)
  第二个*:一天当中的第几小时(0-23)
  第三个*:一个月当中的第几天(1-31)
  第四个*:一年当中的第几月(1-12)
  第五个*:一周当中的星期几(0-7)

  编辑定时任务特殊符号
  *:代表任何时间
  ,:代表不连续时间
  -:代表连续的时间范围
  */n:代表每隔多久执行一次

  编辑定时任务例子
  45 22 * * * command:每天的22:45执行命令
  30 12 * * 1 command:每周一的12:30执行命令
  0 8,12,16 * * * command:每天的8:00,12:00和16:00都执行命令
  0 5 * * 1-6 command:每周一的5:00执行命令
  0/10 4 * * * command:每天的凌晨4点,每隔10分钟执行一次
  0 0 1,15 * 1 command:每周一的0:00和每个月的1号和15号都会执行命令,尽量不要这样写
19

备份与恢复

命令 说明
dump -level 设定level备份级别,0为完全备份,1-9为增量备份,对分区可以增量备份,对于文件或目录只能完全备份
dump -f b_file o_file 将o_file备份到b_file中
dump -u 备份成功后,把备份时间记录在/etc/dumpdates文件
dump -v 显示备份过程中更多的输出信息
dump -j 调用bzlib库压缩备份文件,将备份文件压缩为.bz2格式
dump -W 显示允许被dump的分区的备份等级及备份时间
restore -C 比较备份数据和实际数据的变换
restore -i 进入交互模式,手工选择需要恢复的文件
restore -t 查看模式,用于查看备份文件中拥有哪些数据
restore -r 还原模式,用于数据还原
restore -f 指定备份文件的文件名

Shell基础

  Shell是一个命令行解释器,为用户提供一个向Linux内核发送请求以便运行程序的系统级程序,用户可以用Shell启动,挂起,停止甚至编写程序

  Shell是一个功能强大的解释性脚本语言,易编写,易调试,灵活性强,且在Shell中可以直接调用Linux系统命令。

  Bash是Linux的基本Shell,执行时使用/文件名或者bash 文件名

定义变量

命令 说明
var_name=’xxx’ 定义变量,等于号前后不要加空格
$var_name 调用变量
unset var_name 删除变量
set 查看所有变量
echo 输出
read -t n var_name 给var_name读入一个值,等待n秒
read -p str var_name 显示str字符串,再给var_name读入一个值

位置参数变量

命令 说明
$n 0代表命令本身,1-9代表第一到第九个参数,10以上要用{}括起来
$* 所有参数,看作一个整体
$@ 所有参数,每个参数分开对待
$# 所有参数的个数

预定义变量

命令 说明
$? 判断最后一次执行命令的返回状态,为0则正确,否则错误
$$ 当前进程的进程号(PID)
$! 后台运行的最后一个进程的进程号

声明变量类型

命令 说明
declare - var_name 给变量设定类型属性
declare + var_name 取消变量的类型属性
declare -i var_name 将变量声明为整型
declare -x var_name 将变量声明为环境变量
declare -p var_name 显示变量的类型

  Linux中的变量都默认为字符串型,数值运算时要采用var_name=$((运算式))的格式。
10

条件判断

命令 说明
[ -d filename ] 注意中括号前后都有空格,判断文件是否存在,并且是否为目录文件,是目录文件为真
[ -e filename ] 判断文件是否存在,存在为真
[ -f filename ] 判断文件是否存在,并且是否为普通文件,是普通文件为真
[ -r filename ] 判断文件是否存在,并且是否具有读权限(无论是拥有者还是所属组还是其他用户,只要有就为真)
[ -w filename ] 判断文件是否存在,并且是否具有写权限
[ -x filename ] 判断文件是否存在,并且是否具有执行权限
[ filename1 -nt filename2 ] 判断文件1是否比文件2新(修改时间)
[ filename1 -ot filename2 ] 判断文件1是否比文件2旧
[ filename1 -ef filename2 ] 判断文件1和文件2的i节点是否一致,可以判断硬链接
[ int1 -eq int2 ] 判断整数1是否等于整数2
[ int1 -ne int2 ] 判断整数1是否不等于整数2
[ int1 -gt int2 ] 判断整数1是否大于整数2
[ int1 -lt int2 ] 判断整数1是否小于整数2
[ int1 -ge int2 ] 判断整数1是否大于等于整数2
[ int1 -le int2 ] 判断整数1是否小于等于整数2
[ -z str ] 判断字符串是否为空
[ -n str ] 判断字符串是否非空
[ str1==str2 ] 判断字符串1是否等于字符串2
[ str1!=str2 ] 判断字符串1是否不等于字符串2
[ judge1 -a judge2 ] 逻辑与,判断1和判断2都为真则为真
[ judge1 -o judge2 ] 逻辑或,判断1和判断2都为假则为假
[ !judge ] 逻辑非,判断取反
12

流程控制

  Linux中Shell脚本的第一句为#!bin/bash,说明下面的内容都是Shell脚本。

  执行脚本时,先将文件的权限变为可执行文件,然后./filename或者直接使用bash filename

if条件流程控制

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 单分支if条件语句格式
# if [ condition ]
# then
# 程序
# fi
# 如果condition成立则执行程序,否则不执行


# 双分支if条件语句格式
# if [ condition ]
# then
# 程序1
# else
# 程序2
# fi
# 如果condition成立则执行程序1,否则执行程序2

13

case条件流程控制

1
2
3
4
5
6
7
8
9
10
11
12
13
# 多分支case条件语句
# case $变量名 in
# "value1")
# 程序1
# ;;
# "value2")
# 程序2
# ;;
# *)
# 程序n
# ;;
# esac
# 如果变量的值为value1执行程序1,变量值为value2执行程序2,...,如果都不等于则执行程序n

15

for循环流程控制

1
2
3
4
5
6
7
8
9
10
11
12
# for 变量 in value1 value2 ...
# do
# 程序
# done
# 和Python语言的for循环类似,将value1,value2,...,依次带入程序,不同value之间用空格分开


# for ((初始值;循环控制条件;变量变换))
# do
# 程序
# done
# 和C语言的for循环类似,将变量带入程序,每次循环结束时更改变量的值,并且判断循环条件是否满足

14

while循环流程控制

1
2
3
4
5
# while [ condition ]
# do
# 程序
# done
# 如果满足条件则进入循环,每次循环结束要重新判断是否满足条件

16

until循环流程控制

1
2
3
4
5
# until [ condition ]
# do
# 程序
# done
# 如果不满足条件则进入循环,每次循环结束要重新判断是否满足条件

17

Linux小结

  因为Linux的安全性和开源特性,使得Linux受到广泛的青睐,尤其是在公司层面。在个人机上,多数人为了使用方便,采用Windows系统。但是为了公司服务器运维稳定,可靠,方便,Linux是使用最广泛的操作系统。因此学会Linux是程序员的必修课之一。

-------------本文结束感谢您的阅读-------------
0%